namespace ext.menu
{
	using System;
	using System.Runtime.CompilerServices;
	using System.Html;
	using System.Collections;
	
	
	/// <summary>
	/// A menu object. This is the container to which you may add menu items. Menu can also serve as a base class
	/// when you want a specialized menu based off of another component (like {@link Ext.menu.DateMenu} for example).  Menus may contain either {@link Ext.menu.Item menu items}, or general {@link Ext.Component Component}s.  To make a contained general {@link Ext.Component Component} line up with other {@link Ext.menu.Item menu items}
	/// specify iconCls: &apos;no-icon&apos;. This reserves a space for an icon, and indents the Component in line
	/// with the other menu items. See {@link Ext.form.ComboBox}.{@link Ext.form.ComboBox#getListParent getListParent}
	/// for an example.  By default, Menus are absolutely positioned, floating Components. By configuring a Menu with
	/// {@link #floating}:false, a Menu may be used as child of a Container.
	/// </summary>
	/// <htmlSummary>
	/// &lt;p&gt;A menu object. This is the container to which you may add menu items. Menu can also serve as a base class
	/// when you want a specialized menu based off of another component (like {@link Ext.menu.DateMenu} for example).&lt;/p&gt;
	/// &lt;p&gt;Menus may contain either {@link Ext.menu.Item menu items}, or general {@link Ext.Component Component}s.&lt;/p&gt;
	/// &lt;p&gt;To make a contained general {@link Ext.Component Component} line up with other {@link Ext.menu.Item menu items}
	/// specify &lt;tt&gt;iconCls: &apos;no-icon&apos;&lt;/tt&gt;. This reserves a space for an icon, and indents the Component in line
	/// with the other menu items. See {@link Ext.form.ComboBox}.{@link Ext.form.ComboBox#getListParent getListParent}
	/// for an example.&lt;/p&gt;
	/// &lt;p&gt;By default, Menus are absolutely positioned, floating Components. By configuring a Menu with
	/// &lt;b&gt;&lt;tt&gt;{@link #floating}:false&lt;/tt&gt;&lt;/b&gt;, a Menu may be used as child of a Container.&lt;/p&gt;
	/// </htmlSummary>
	/// <definedin>src\widgets\menu\Menu.js</definedin>
	[ScriptName("Menu")]
	[ScriptNamespace("Ext.menu")]
	[Imported()]
	public partial class Menu : ext.Container
	{
		
		#region Constructors
		public Menu(ext.menu.Menu_Configuration config)
		{
		}
		
		/// <summary>Constructor</summary>
		public Menu()
		{
		}
		#endregion
		
		#region Fields
		/// <summary>
		/// A config object that will be applied to all items added to this container either via the {@link #items}
		/// config or via the {@link #add} method. The defaults config can contain any number of
		/// name/value property pairs to be added to each item, and should be valid for the types of items
		/// being added to the menu.
		/// </summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("defaults")]
		public object Defaults;
		
		/// <summary>
		/// An array of items to be added to this menu. Menus may contain either {@link Ext.menu.Item menu items},
		/// or general {@link Ext.Component Component}s.
		/// </summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("items")]
		public object Items;
		
		/// <summary>The minimum width of the menu in pixels (defaults to 120)</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("minWidth")]
		public System.Number MinWidth;
		
		/// <summary>
		/// True or &apos;sides&apos; for the default effect, &apos;frame&apos; for 4-way shadow, and &apos;drop&apos;
		/// for bottom-right shadow (defaults to &apos;sides&apos;)
		/// </summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("shadow")]
		public ext.auto.System_Boolean_Or_System_String Shadow;
		
		/// <summary>
		/// The {@link Ext.Element#alignTo} anchor position value to use for submenus of
		/// this menu (defaults to &apos;tl-tr?&apos;)
		/// </summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("subMenuAlign")]
		public string SubMenuAlign;
		
		/// <summary>
		/// The default {@link Ext.Element#alignTo} anchor position value for this menu
		/// relative to its element of origin (defaults to &apos;tl-bl?&apos;)
		/// </summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("defaultAlign")]
		public string DefaultAlign;
		
		/// <summary>True to allow multiple menus to be displayed at the same time (defaults to false)</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("allowOtherMenus")]
		public bool AllowOtherMenus;
		
		/// <summary>
		/// True to ignore clicks on any item in this menu that is a parent item (displays
		/// a submenu) so that the submenu is not dismissed when clicking the parent item (defaults to false).
		/// </summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("ignoreParentClicks")]
		public bool IgnoreParentClicks;
		
		/// <summary>True to allow the menu container to have scroller controls if the menu is too long (defaults to true).</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("enableScrolling")]
		public bool EnableScrolling;
		
		/// <summary>The maximum height of the menu. Only applies when enableScrolling is set to True (defaults to null).</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("maxHeight")]
		public System.Number MaxHeight;
		
		/// <summary>The amount to scroll the menu. Only applies when enableScrolling is set to True (defaults to 24).</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("scrollIncrement")]
		public System.Number ScrollIncrement;
		
		/// <summary>True to show the icon separator. (defaults to true).</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("showSeparator")]
		public bool ShowSeparator;
		
		/// <summary>
		/// An array specifying the [x, y] offset in pixels by which to
		/// change the default Menu popup position after aligning according to the {@link #defaultAlign}
		/// configuration. Defaults to [0, 0].
		/// </summary>
		/// <htmlSummary>
		/// An array specifying the [x, y] offset in pixels by which to
		/// change the default Menu popup position after aligning according to the {@link #defaultAlign}
		/// configuration. Defaults to &lt;tt&gt;[0, 0]&lt;/tt&gt;.
		/// </htmlSummary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("defaultOffsets")]
		public System.Array DefaultOffsets;
		
		/// <summary>True to remove the incised line down the left side of the menu. Defaults to false.</summary>
		/// <htmlSummary>True to remove the incised line down the left side of the menu. Defaults to &lt;tt&gt;false&lt;/tt&gt;.</htmlSummary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("plain")]
		public bool Plain;
		
		/// <summary>
		/// By default, a Menu configured as floating:true
		/// will be rendered as an {@link Ext.Layer} (an absolutely positioned,
		/// floating Component with zindex=15000).
		/// If configured as floating:false, the Menu may be
		/// used as child item of another Container instead of a free-floating
		/// {@link Ext.Layer Layer}.
		/// </summary>
		/// <htmlSummary>
		/// &lt;p&gt;By default, a Menu configured as &lt;b&gt;&lt;code&gt;floating:true&lt;/code&gt;&lt;/b&gt;
		/// will be rendered as an {@link Ext.Layer} (an absolutely positioned,
		/// floating Component with zindex=15000).
		/// If configured as &lt;b&gt;&lt;code&gt;floating:false&lt;/code&gt;&lt;/b&gt;, the Menu may be
		/// used as child item of another Container instead of a free-floating
		/// {@link Ext.Layer Layer}.
		/// </htmlSummary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("floating")]
		public bool Floating;
		
		/// <summary>zIndex to use when the menu is floating.</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("zIndex")]
		public System.Number ZIndex;
		
		/// <summary>
		/// This class assigns a default layout (layout:&apos;menu&apos;).
		/// Developers may override this configuration option if another layout is required.
		/// See {@link Ext.Container#layout} for additional information.
		/// </summary>
		/// <htmlSummary>
		/// This class assigns a default layout (&lt;code&gt;layout:&apos;&lt;b&gt;menu&lt;/b&gt;&apos;&lt;/code&gt;).
		/// Developers &lt;i&gt;may&lt;/i&gt; override this configuration option if another layout is required.
		/// See {@link Ext.Container#layout} for additional information.
		/// </htmlSummary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("layout")]
		public ext.auto.System_String_Or_System_Object Layout;
		
		/// <summary>Fires when this menu is clicked (or when the enter key is pressed while it is active)</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("clickEventName")]
		public const string ClickEventName = "click";
		
		/// <summary>Fires when the mouse is hovering over this menu</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("mouseoverEventName")]
		public const string MouseoverEventName = "mouseover";
		
		/// <summary>Fires when the mouse exits this menu</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("mouseoutEventName")]
		public const string MouseoutEventName = "mouseout";
		
		/// <summary>Fires when a menu item contained in this menu is clicked</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("itemclickEventName")]
		public const string ItemclickEventName = "itemclick";
		#endregion
		
		#region Methods
		/// <summary>Adds a separator bar to the menu</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		/// <returns>The menu item that was added</returns>
		[ScriptName("addSeparator")]
		public ext.menu.Item AddSeparator()
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>Adds an {@link Ext.Element} object to the menu</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		/// <param name="el">The element or DOM node to add, or its id</param>
		/// <returns>The menu item that was added</returns>
		[ScriptName("addElement")]
		public ext.menu.Item AddElement(object el)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>Adds an existing object based on {@link Ext.menu.BaseItem} to the menu</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		/// <param name="item">The menu item to add</param>
		/// <returns>The menu item that was added</returns>
		[ScriptName("addItem")]
		public ext.menu.Item AddItem(ext.menu.Item item)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>Creates a new {@link Ext.menu.Item} based an the supplied config object and adds it to the menu</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		/// <param name="config">A MenuItem config object</param>
		/// <returns>The menu item that was added</returns>
		[ScriptName("addMenuItem")]
		public ext.menu.Item AddMenuItem(object config)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>Creates a new {@link Ext.menu.TextItem} with the supplied text and adds it to the menu</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		/// <param name="text">The text to display in the menu item</param>
		/// <returns>The menu item that was added</returns>
		[ScriptName("addText")]
		public ext.menu.Item AddText(string text)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>
		/// If {@link #floating}=true, shows this menu relative to
		/// another element using {@link #showat}, otherwise uses {@link Ext.Component#show}.
		/// </summary>
		/// <htmlSummary>
		/// If &lt;code&gt;{@link #floating}=true&lt;/code&gt;, shows this menu relative to
		/// another element using {@link #showat}, otherwise uses {@link Ext.Component#show}.
		/// </htmlSummary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		/// <param name="element">The element to align to</param>
		/// <param name="position">
		/// The {@link Ext.Element#alignTo} anchor position to use in aligning to
		/// the element (defaults to this.defaultAlign)
		/// </param>
		/// <param name="parentMenu">This menu&apos;s parent menu, if applicable (defaults to undefined)</param>
		[ScriptName("show")]
		public void Show(object element, string position, ext.menu.Menu parentMenu)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>
		/// If {@link #floating}=true, shows this menu relative to
		/// another element using {@link #showat}, otherwise uses {@link Ext.Component#show}.
		/// </summary>
		/// <htmlSummary>
		/// If &lt;code&gt;{@link #floating}=true&lt;/code&gt;, shows this menu relative to
		/// another element using {@link #showat}, otherwise uses {@link Ext.Component#show}.
		/// </htmlSummary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		/// <param name="element">The element to align to</param>
		/// <param name="position">
		/// The {@link Ext.Element#alignTo} anchor position to use in aligning to
		/// the element (defaults to this.defaultAlign)
		/// </param>
		[ScriptName("show")]
		public void Show(object element, string position)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>
		/// If {@link #floating}=true, shows this menu relative to
		/// another element using {@link #showat}, otherwise uses {@link Ext.Component#show}.
		/// </summary>
		/// <htmlSummary>
		/// If &lt;code&gt;{@link #floating}=true&lt;/code&gt;, shows this menu relative to
		/// another element using {@link #showat}, otherwise uses {@link Ext.Component#show}.
		/// </htmlSummary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		/// <param name="element">The element to align to</param>
		[ScriptName("show")]
		public void Show(object element)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>
		/// Displays this menu at a specific xy position and fires the &apos;show&apos; event if a
		/// handler for the &apos;beforeshow&apos; event does not return false cancelling the operation.
		/// </summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		/// <param name="xyPosition">Contains X &amp; Y [x, y] values for the position at which to show the menu (coordinates are page-based)</param>
		/// <param name="parentMenu">This menu&apos;s parent menu, if applicable (defaults to undefined)</param>
		[ScriptName("showAt")]
		public void ShowAt(System.Array xyPosition, ext.menu.Menu parentMenu)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>
		/// Displays this menu at a specific xy position and fires the &apos;show&apos; event if a
		/// handler for the &apos;beforeshow&apos; event does not return false cancelling the operation.
		/// </summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		/// <param name="xyPosition">Contains X &amp; Y [x, y] values for the position at which to show the menu (coordinates are page-based)</param>
		[ScriptName("showAt")]
		public void ShowAt(System.Array xyPosition)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>Hides this menu and optionally all parent menus</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		/// <param name="deep">True to hide all parent menus recursively, if any (defaults to false)</param>
		[ScriptName("hide")]
		public void Hide(bool deep)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>Hides this menu and optionally all parent menus</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("hide")]
		public void Hide()
		{
			throw new System.Exception("Imported - not implemented");
		}
		#endregion
		
		#region Events
		/// <summary>Fires when this menu is clicked (or when the enter key is pressed while it is active)</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("click")]
		public event ext.auto.Delegate_ext_menu_Menu_And_ext_menu_Item_And_ext_EventObject Click;
		
		/// <summary>Fires when the mouse is hovering over this menu</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("mouseover")]
		public event ext.auto.Delegate_ext_menu_Menu_And_ext_EventObject_And_ext_menu_Item Mouseover;
		
		/// <summary>Fires when the mouse exits this menu</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("mouseout")]
		public event ext.auto.Delegate_ext_menu_Menu_And_ext_EventObject_And_ext_menu_Item Mouseout;
		
		/// <summary>Fires when a menu item contained in this menu is clicked</summary>
		/// <definedin>src\widgets\menu\Menu.js</definedin>
		[ScriptName("itemclick")]
		public event ext.auto.Delegate_ext_menu_BaseItem_And_ext_EventObject Itemclick;
		#endregion
	}
}
